package cn.com.dhcc.app.pub.core.util.settlement.compute.store;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * 数据分组实体
 * @author Administrator
 *
 */
public class DataGroupVo {

	//要分的组数
	private int group;//
	
	//是否存储源数据，--如果有需要通过hash数据映射出原始数据就设置为true
	private boolean mapping;
	
	//数据经过hash后分组集合
	private List<List<String>> hashList;
	
	//hash数据与原始数据的对应集合
	private Map<Integer,Map<String,String>> map;

	public int getGroup() {
		return group;
	}

	public List<List<String>> getHashList() {
		return hashList;
	}

	public Map<Integer,Map<String,String>> getMap(){
		return map;
	}

	/**
	 * 默认mapping为false
	 * @param group
	 */
	public DataGroupVo(int group) {
		this(group, false);
	}
	
	
	
	public DataGroupVo(int group,boolean mapping) {
		super();
		this.group = group;
		this.mapping=mapping;
	}
	
	
	/**
	 * 初始化list集合
	 * @param list
	 * @param size
	 */
	private void initList(List<List<String>> list,int size){
		for (int i = 0; i < size; i++) {
			list.add(new ArrayList<String>());
		}
	}
	
	/**
	 * 初始化map集合
	 * @param map
	 * @param size
	 */
	private void initMap(Map<Integer,Map<String,String>> map,int size){
		for (int i = 0; i < size; i++) {
			map.put(i, new HashMap<String,String>());
		}
	}
	
	/**
	 * 存储原始数据，对应的hash数据
	 * @param indexGroup 组号
	 * @param hashData 哈希值
	 * @param srcData 原始值
	 */
	public void putData(int indexGroup,String hashData,String srcData){
		if (indexGroup>group) {
			throw new RuntimeException("不能超出预先定义的group大小");
		}
		if (this.hashList==null) {
			this.hashList=new ArrayList<List<String>>();
			initList(hashList, group);
		}
		this.hashList.get(indexGroup).add(hashData);
		
		//如果需要映射出原始数据，则保存
		if (this.mapping) {
			if (this.map==null) {
				this.map=new HashMap<Integer,Map<String,String>>();
				initMap(this.map, group);
			}
			this.map.get(indexGroup).put(hashData, srcData);
		}
	}
	
	public List<String> mapping(int indexGroup,List<String> hashList){
		List<String> mappingList=new ArrayList<String>();
		if (hashList==null || hashList.isEmpty()) {
			return mappingList;
		}
		Map<String,String> map=this.map.get(indexGroup);
		for (int i = 0; i < hashList.size(); i++) {
			String hash=hashList.get(i);
			mappingList.add(map.get(hash));
		}
		return mappingList;
	}
	
	
}
